// 角色类定义
class Character {
    constructor(id, name, city) {
        this.id = id;
        this.name = name;
        this.city = city; // 所在城市
        
        // 基础属性
        this.happiness = 100;  // 快乐值
        this.stamina = 100;    // 精力值（合并了原有的饥饿值和能量值）
        this.health = 100;     // 健康值
        
        // 四维属性
        this.strength = 10;    // 力量
        this.agility = 10;     // 敏捷
        this.intelligence = 10;// 智力
        this.charisma = 10;    // 魅力
        
        // 物品栏
        this.inventory = [];
        // 初始化基础资源作为物品，显式传入中文名称
        this.addItem('money', 100, '金钱');
        this.addItem('wood', 20, '木材');
        this.addItem('stone', 10, '石头');
        this.addItem('metal', 0, '金属');
        
        // 个人技能数据 - 每个角色独立拥有
        this.skills = {
            // 大类技能
            耕作: {
                points: 0,
                level: 1,
                talent: 1,
                // 小类技能
                种植: 0,
                畜牧: 0,
                农艺: 0
            },
            采伐: {
                points: 0,
                level: 1,
                talent: 1,
                采集: 0,
                伐木: 0,
                开采: 0,
                勘探: 0
            },
            建设: {
                points: 0,
                level: 1,
                talent: 1,
                建筑: 1,
                修缮: 0
            },
            加工: {
                points: 0,
                level: 1,
                talent: 1,
                冶炼: 0,
                金属锻造: 0,
                纺织: 0,
                食品加工: 0,
                木石加工: 0
            },
            社交: {
                points: 0,
                level: 1,
                talent: 1,
                雄辩: 0,
                交际: 0,
                文书: 0,
                管理: 0
            },
            舟车: {
                points: 0,
                level: 1,
                talent: 1,
                陆上运输: 0,
                水上运输: 0
            },
            畜牧: {
                points: 0,
                level: 1,
                talent: 1,
                饲养: 0,
                繁殖: 0,
                兽医: 0
            }
        };
    }
    
    // 更新每日状态
    updateDailyStats() {
        // 每天消耗精力（合并了原有的饥饿和能量消耗）
        this.stamina += 5; //睡觉基础回复5点精力
        
        // 精力不足影响健康和心情
        if (this.stamina < 40) {
            this.health -= 5; //不吃饭会导致精力一直很低导致影响健康导致嗝屁
            this.happiness -= 5;
        } else if (this.stamina < 70) {
            this.health -= 2;
            this.happiness -= 2;
        }
        
        // 健康影响心情
        if (this.health < 50) {
            this.happiness -= 2;
        }
        
        // 确保状态值在合理范围内
        this.clampStats();
    }
    
    // 限制状态值在合理范围内
    clampStats() {
        this.happiness = Math.max(0, Math.min(100, this.happiness));
        this.stamina = Math.max(0, Math.min(100, this.stamina));
        this.health = Math.max(0, Math.min(100, this.health));
    }
    
    // 根据季节调整状态
    adjustForSeason(season) {
        switch (season) {
            case '春季':
                this.happiness += 5; // 春季心情变好
                break;
            case '夏季':
                this.stamina -= 15; // 夏季炎热，消耗更多精力
                break;
            case '秋季':
                this.happiness += 3; // 秋季丰收，心情不错
                break;
            case '冬季':
                this.health -= 5; // 冬季寒冷，影响健康
                this.stamina -= 10; // 冬季消耗更多精力
                break;
        }
        
        // 确保状态值在合理范围内
        this.clampStats();
    }
    
    // 添加物品到物品栏 - 支持按ID操作
    addItem(itemId, quantity = 1, name = itemId, description = '') {
        const existingItem = this.inventory.find(i => i.id === itemId);
        if (existingItem) {
            existingItem.quantity += quantity;
        } else {
            // 创建基本物品对象
            this.inventory.push({
                id: itemId,
                name: name,
                quantity: quantity,
                description: description
            });
        }
    }
    
    // 从物品栏移除物品 - 支持按ID操作
    removeItem(itemId, quantity = 1) {
        const item = this.inventory.find(i => i.id === itemId);
        if (item && item.quantity >= quantity) {
            item.quantity -= quantity;
            return true;
        }
        return false; // 物品不足或不存在
    }

    getItemData(itemId) {
        return this.inventory.find(i => i.id === itemId);
    }
    
    // 获取资源数量
    getItemQuantity(itemId) {
        const item = this.inventory.find(i => i.id === itemId);
        return item ? item.quantity : 0;
    }
    
    // 技能相关方法
    getSkillLevel(skillType) {
        return this.skills[skillType].level;
    }
    
    getSubSkillPoints(skillType, subSkill) {
        return this.skills[skillType][subSkill];
    }
    
    // 增加技能点
    increaseSkillPoints(skillType, subSkill, points) {
        this.skills[skillType].points += points;
        this.skills[skillType][subSkill] += points;
        // 检查升级
        return this.checkSkillLevelUp(skillType);
    }
    
    // 检查技能升级
    checkSkillLevelUp(skillType) {
        const skill = this.skills[skillType];
        if (!skill) return { leveledUp: false };
        
        const requiredPoints = skill.level * 100;
        
        if (skill.points >= requiredPoints) {
            skill.level += 1;
            return {
                leveledUp: true,
                message: `${skillType} 技能升级到 ${skill.level} 级！`,
                newLevel: skill.level
            };
        }
        return { leveledUp: false };
    }
    
    // 更新属性
    updateAttributes(attributes) {
        Object.assign(this, attributes);
        this.clampStats();
    }
}

// 角色管理器类
class CharacterManager {
    constructor() {
        this.characters = [];
        this.activeCharacter = null;
    }
    
    // 添加角色
    addCharacter(character) {
        this.characters.push(character);
    }
    
    // 创建新角色
    createCharacter(id, name, city) {
        const character = new Character(id, name, city);
        this.addCharacter(character);
        return character;
    }
    
    // 获取当前活跃角色
    getActiveCharacter() {
        return this.activeCharacter;
    }
    
    // 设置活跃角色
    setActiveCharacter(characterId) {
        const character = this.characters.find(c => c.id === characterId);
        this.activeCharacter = character;
    }
    
    // 获取所有角色
    getAllCharacters() {
        return this.characters;
    }
    
    // 更新所有角色的每日状态
    updateAllCharactersDailyStats() {
        this.characters.forEach(character => {
            character.updateDailyStats();
        });
    }
    
    // 根据季节调整所有角色状态
    adjustAllCharactersForSeason(season) {
        this.characters.forEach(character => {
            character.adjustForSeason(season);
        });
    }
}

// 创建全局角色管理器实例
const characterManager = new CharacterManager();

// 全局函数 - 获取当前活跃角色
function getActiveCharacter() {
    return characterManager.getActiveCharacter();
}

// 导出类和实例及全局函数
export { Character, CharacterManager, characterManager, getActiveCharacter };